package main

func main() {
	/*
		”依赖注入“和“控制反转”：
			正常情况下，对函数或方法的调用是调用方的主动直接行为，
			调用方清楚地知道被调用的函数名是什么，参数有那些类型，直接主动地调用；包括对象的初始化也是显示的直接初始化

			控制反转：
				就是将这种主动行为变成间接的行为，主调方不是直接调用函数或对象，而是借助框架代码进行间接的调用和初始化
				控制反转可以解耦调用方和被调用方
				 例如：一般情况下，使用库的程序是程序主动地调用库的功能。
					但使用框架的程序常常由框架驱动整个程序，在框架写的业务代码是被框架驱动的，这种模式就是“控制反转”

			依赖注入：
				是实现“控制反转”的一种方法
				如果”控制反转“是一种设计思想，那么”依赖注入“就是这种思想的一种实现，通过注入的参数或实例的方式实现控制反转

			好处：“解耦”
				有了控制反转就不需要调用者将代码写死，可以让控制反转的框架代码读取配置，动态地构建对象

			使用框架的副作用：
				当问题足够复杂时，应该考虑的是服务拆分，而不是把复杂度逻辑用一个“大盒子”装起来，看起来干净了，但实现还是很复杂
	*/
}
